class Person:
    def __init__(self, name):
        self._name = name
        
    def get_name(self):
        print('fetch...')
        return self._name
    
    def set_name(self, value):
        print('change...')
        self._name = value
        
    def del_name(self):
        print('remove...')
        del self._name
        
    name = property(get_name, set_name, del_name, "name property docs")


bob = Person('Laven Liu')  # bob has a managed attribute
print(bob.name)  # runs get_name
bob.name = 'Tao Qi'  # runs set_name
print(bob.name)
del bob.name  # runs del_name

print('-' * 20)
sue = Person('Tao Qi')  # sue inherits property too
print(sue.name)
print(Person.name.__doc__)  # or help(Person.name)
